mysql索引、优化、sql性能分析

您所在的位置:网站首页 insert all into 效率 mysql索引、优化、sql性能分析

mysql索引、优化、sql性能分析

2023-03-23 20:17| 来源: 网络整理| 查看: 265

为什么InnoDB存储引擎选择使用B+tree索引结构?

相对于二叉树,层级更少,搜索效率高 对于B-tree,无论是叶子节点还是非叶子节点,都会保存数据,这样导致一页中存储的键值减少,指针跟着减少,要同样保存大量数据,只能增加树的高度,导致性能降低 相对Hash索引,B+tree支持范围匹配和排序操作

聚集索引选取规则:

如果存在主键,主键索引就是聚集索引 如果不存在主键,将使用第一个唯一(UNIQUE)索引作为聚集索引 如果表没有主键,或没有合适的唯一索引,则InnoDB会自动生成一个rowid作为隐藏的聚集索引。

SQL性能分析

1.SQL执行频率

show [globle|session] status

查看数据库访问频次

show globle status like 'Com_______';

2.慢查询日志

在/etc/my.cnf修改配置信息

#开启Mysq慢查询日志开关 show_query_log=1 #设置慢查询日志的时间为2秒,SQL语句执行时间超过2秒,就会视为慢查询,记录慢查询日志 long_query_time = 2 修改完配置记得重启mysql服务 systemctl restart mysqld 在/var/lib/mysql/localhost-slow.log查看

3.profile详情

#查看当前Mysql是否支持profile操作: select @@have_profiling; #默认profiling是关闭的,可以通过set语句在session/global级别开启profiling select @@profiling; set profiling = 1; #查看每一条sql的耗时基本情况 show profiles #查看指定query_id 的SQL语句各个阶段的耗时情况 show profile for query query_id #查看指定query_id的SQL语句CPU的使用情况 show profile cpu for query query_id

4.explain执行计划

explain执行计划各字段的含义:

字段 含义 id select查询的序列号,表示查询中执行select子句或者是操作表的顺序(id相同,执行顺序从上到下;id不同,值越大,越先执行) select_type 表示select的类型,常见的取值有simple(简单表,即不使用表连接或者子查询)、primary(主查询,即外层的查询)、union(uinon中的第二个或者后面的查询语句)、subquery(select/where之后包含了子查询)等 type 表示连接类型,性能由好到差的连接类型为null、system、const、eq_ref、range、index、all. possiable_key 显示可能应用在这张表上的索引,一个或多个 key 实际使用的索引,如果为null,则没有使用索引 key_len 表示索引中使用的字节数,该值为索引字段最大可能长度,并非实际使用长度,在不损失精确性的前体下,长度越短越好 rows MySQL认为必须要执行查询的行数,在innodb引擎的表中,是一个估计值,可能并不总是精确的。 filtered 表示返回结果的行数占需读取行数的百分比,filtered的值越大越好。

5.索引使用规则

5.1最左前缀法则

如果索引了多列(联合索引),要遵循最左前缀法则。即查询从索引的最左列开始,并且不跳过索引中的列,如果跳跃某一列,索引将部分失效(后面的部分索引失效)

5.2范围查询(针对联合索引)

联合索引中 ,出现范围查询(>,= ,



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3